
package com.x52im.rbchat.logic.contact.viewholder;

import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.eva.epc.common.util.CommonUtils;
import com.x52im.rbchat.R;
import com.x52im.rbchat.cache.ImageCacheLoader;
import com.x52im.rbchat.logic.contact.FriendListAdapter;
import com.x52im.rbchat.logic.contact.model.FriendItemValue;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;

/**
 * 好友列表item的viewHolder实现类。
 *
 * @author JackJiang
 * @since 8.0
 */
public class FriendItemViewHolder extends RecyclerView.ViewHolder{

    private Fragment fragment;
    private FriendListAdapter adapter;

    /** 头像图片显示组件 */
    private ImageView ivAvatar;
    /** 快速索引字母显示组件 */
    private TextView tvCatlog;
    /** 昵称显示组件 */
    private TextView tvNickname;
    /** 在线、离线状态显示组件 */
    private TextView tvOnlineFlag = null, tvOfflineFlag = null;

    public FriendItemViewHolder(Fragment fragment, FriendListAdapter adapter, View itemView) {
        super(itemView);
        this.fragment = fragment;
        this.adapter = adapter;

        this.ivAvatar = itemView.findViewById(R.id.contact_item_avatarView);
        this.tvNickname = itemView.findViewById(R.id.contact_item_nameView);
        this.tvCatlog = itemView.findViewById(R.id.contact_item_categoryTextView);

        this.tvOnlineFlag = itemView.findViewById(R.id.contact_item_friend_statusOnlineFlagView);
        this.tvOfflineFlag = itemView.findViewById(R.id.contact_item_friend_statusOfflineFlagView);
    }

    public void onBind(FriendItemValue userInfo) {
        if (userInfo.isShowCategory()) {
            tvCatlog.setVisibility(View.VISIBLE);
            tvCatlog.setText(userInfo.getCategory());
        } else {
            tvCatlog.setVisibility(View.GONE);
        }

        tvNickname.setText(userInfo.getFriendInfo().getNickNameWithRemark());

        // liveStatus=0以灰色显示状态名称
        if (0 == userInfo.getFriendInfo().getLiveStatus())
        {
            tvOnlineFlag.setVisibility(View.GONE);
            tvOfflineFlag.setVisibility(View.VISIBLE);// TODO: VISIBLE
        }
        // liveStatus=1以绿色显示状态名称
        else if (1 == userInfo.getFriendInfo().getLiveStatus())
        {
            tvOnlineFlag.setVisibility(View.VISIBLE);
            tvOfflineFlag.setVisibility(View.GONE);
        }

        // 根据Glide官方指南的说明：https://muyangmin.github.io/glide-docs-cn/doc/getting-started.html#%E5%9C%A8-listview-%E5%92%8C-recyclerview-%E4%B8%AD%E7%9A%84%E4%BD%BF%E7%94%A8
        // 由于RecycleView中view的复用问题，为了防止图片显示错乱，如果它在之前的位置上用 Glide 进行过加载操作，那么在新的位置上要去执行一个新的加载操作或调用 clear()，
        // 实测通过clear()或通过Glide.with(context).load(默认占位图的资源id)两种方式都可以解决错乱问题，但clear更好，因为它不会在发生图片显示时闪烁一下的问题
//      Glide.with(context).load(R.drawable.main_alarms_sns_addfriendreject2r_message_icon).into(holder.viewIcon); // 解决方法1
        Glide.with(fragment).clear(ivAvatar);// 解决方法2
        // clear完成后设置默认占位图，确保图片显示不出现Glide导致的错位问题
        ivAvatar.setImageResource(R.drawable.default_avatar_for_contact_40dp_21pxround);

        // 头像文件名
        String userAvatarFileName = userInfo.getFriendInfo().getUserAvatarFileName();
        // 头像文件名为空就表示此人是没有被设置头像的
        if(!CommonUtils.isStringEmpty(userAvatarFileName, true)) {
            // 加载头像图片
            ImageCacheLoader.loadAvatarImgWithGlide(fragment, userInfo.getFriendInfo().getUser_uid(), userAvatarFileName
                    , ivAvatar
                    , 7 // 圆角单位是dp，（相当于xxhdpi下的21像素）
                    , R.drawable.default_avatar_for_contact_40dp_21pxround, false, false);
        }
    }
}
